搜索 K
Appearance
博客正在加载中...
Appearance
接下来就是高级篇的内容了。在学习高级篇之前,请务必完成基础篇的内容,我们先从 MySQL 主从搭建开始。
由于这是高级篇的内容,默认同学们都了解过主从复制,如果不会的同学可以参考下 MyCat 教程中关于主从复制搭建的博客
我们将 3307 端口用作主服务器,3308 作为从服务器。
如果是云服务器,注意开启防火墙。
命令:
docker run -p 3307:3306 --name mysql-master \
-v /mydata/mysql-master/log:/var/log/mysql \
-v /mydata/mysql-master/data:/var/lib/mysql \
-v /mydata/mysql-master/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7启动后用 ps 检查下是否正常,并且也最后进入容器内看看能否登录 MySQL。
新建 /mydata/mysql-master/conf/my.cnf,内容如下:
[mysqld]
## 设置server_id,同一局域网中需要唯一
server_id=101
## 指定不需要同步的数据库名称
binlog-ignore-db=mysql
## 开启二进制日志功能
log-bin=mall-mysql-bin
## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M
## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed
## 二进制日志过期清理时间。默认值为0,表示不自动清理。
expire_logs_days=7
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062重启 MySQL:
docker restart mysql-master创建 MySQL 同步用户并授权:
$ docker exec -it mysql-master /bin/bash
$ mysql -uroot -proot
mysql> CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%'; 命令:
docker run -p 3308:3306 --name mysql-slave \
-v /mydata/mysql-slave/log:/var/log/mysql \
-v /mydata/mysql-slave/data:/var/lib/mysql \
-v /mydata/mysql-slave/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7同理,启动后用 ps 检查下是否正常,并且也最后进入容器内看看能否登录 MySQL。 新增配置文件 /mydata/mysql-slave/conf/my.cnf:
[mysqld]
## 设置server_id,同一局域网中需要唯一
server_id=102
## 指定不需要同步的数据库名称
binlog-ignore-db=mysql
## 开启二进制日志功能,以备Slave作为其它数据库实例的Master时使用
log-bin=mall-mysql-slave1-bin
## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M
## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed
## 二进制日志过期清理时间。默认值为0,表示不自动清理。
expire_logs_days=7
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062
## relay_log配置中继日志
relay_log=mall-mysql-relay-bin
## log_slave_updates表示slave将复制事件写进自己的二进制日志
log_slave_updates=1
## slave设置为只读(具有super权限的用户除外)
read_only=1修改完配置后重启 slave 实例:
docker restart mysql-slave 在主数据库中查看主从同步状态(注意,每个人的结果可能都不一样,以自己的为准,后续不再重复这一点):
show master status;
+-----------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-----------------------+----------+--------------+------------------+-------------------+
| mall-mysql-bin.000001 | 617 | | mysql | |
+-----------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)在从数据库配置主从复制(注意,宿主机 IP 等信息请更换为自己的):
change master to master_host='192.168.2.242', \
master_user='slave', \
master_password='123456', \
master_port=3307, \
master_log_file='mall-mysql-bin.000001', \
master_log_pos=617, \
master_connect_retry=30;主从复制命令参数说明
mysql> start slave;
mysql> show slave status \G;
........
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
.......如果上述两个字段的值是 Yes,则说明主从复制成功 如果失败了,则观察下 Last_IO_Errot 的字段,会显示为什么主从复制失败,然后重新配置:
mysql> stop slave;
mysql> reset slave;
mysql> change master.........
主机插入数据:
mysql> create database db01;
mysql> use db01;
mysql> create table t1(id int, name varchar(20));
mysql> insert into t1 values(1, 'z3');
mysql> select * from t1;
+------+------+
| id | name |
+------+------+
| 1 | z3 |
+------+------+
1 row in set (0.00 sec)从机查看数据:
mysql> use db01;
mysql> select * from t1;
+------+------+
| id | name |
+------+------+
| 1 | z3 |
+------+------+
1 row in set (0.00 sec) 可以看到从数据库能查出数据,主从复制配置成功。
(完)。